import './assets/main.css'
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

// @ts-ignore 忽略 Vue 文件类型检查错误
import App from './App.vue'
import router from './router'

// 声明全局变量
declare global {
  interface Window {
    __MICRO_APP_ENVIRONMENT__?: boolean
    __MICRO_APP_NAME__?: string
    microApp?: any
    __MICRO_APP_PUBLIC_PATH__?: string
  }
}

let app: any = null
let dataListenerHandler: any = null
let lastPath = '' // 用于记录上一次处理的路径

// 创建应用实例的函数
function createVueApp() {
  app = createApp(App)
  
  // 注册 Element Plus 图标
  for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component)
  }
  
  app.use(createPinia())
  app.use(ElementPlus)
  app.use(router)
  
  // 确保挂载到正确的DOM元素
  app.mount('#app')
  console.log('订单子应用已挂载')
  
  // 微前端环境下的特殊处理
  if (window.__MICRO_APP_ENVIRONMENT__) {
    console.log('订单子应用运行在微前端环境中')
    
    // 监听主应用下发的数据变化
    dataListenerHandler = window.microApp?.addDataListener((data: any) => {
      console.log('收到主应用数据:', data)
      
      // 如果主应用下发了路径信息，则进行路由跳转
      if (data.path) {
        const path = data.path
        console.log('主应用下发路径:', path)
        
        // 从完整路径中提取子应用路径
        if (path.includes('/appOrder/')) {
          const subPath = '/' + path.split('/appOrder/')[1]
          console.log('提取子路径:', subPath)
          
          // 避免重复导航
          if (lastPath !== subPath && subPath !== router.currentRoute.value.path) {
            lastPath = subPath
            // 使用router.replace而不是直接修改history
            router.replace(subPath)
          }
        }
      }
    })
    
    // 导出清理函数
    app.config.globalProperties.$unmount = () => {
      if (dataListenerHandler) {
        window.microApp?.removeDataListener(dataListenerHandler)
      }
      app?.unmount()
      app = null
      console.log('订单子应用已卸载')
    }
  } else {
    console.log('订单子应用运行在独立环境中')
  }
}

// 直接创建应用实例
createVueApp()

// 导出卸载函数
export function unmount() {
  if (app?.config?.globalProperties?.$unmount) {
    app.config.globalProperties.$unmount()
  } else {
    // 在微前端环境下，移除事件监听
    if (window.__MICRO_APP_ENVIRONMENT__ && dataListenerHandler) {
      window.microApp?.removeDataListener(dataListenerHandler)
    }
    
    app?.unmount()
    app = null
    console.log('订单子应用已卸载')
  }
}